define(['jquery'], function($) {
	(function($) {
		var JqExt={};
		/**
		 * 获取方法的参数数组
		 */
		JqExt.funArgs = function($function) {
			if(typeof $function === 'function'){
				// 先用正则匹配,取得符合参数模式的字符串.
				 // 第一个分组是这个: ([^)]*) 非右括号的任意字符
				 var _args = $function.toString().match(/function(.*?)\(([\s\S]*?)\)/)[2];
				 // 用逗号来分隔参数(arguments string).
				 return _args.split(",").map(function(arg) {
				  // 去除注释(inline comments)以及空格
				  return arg.replace(/\/\*.*\*\//, "").trim();
				 }).filter(function(arg) {
				  // 确保没有 undefined.
				  return arg;
				 });
			}
			return [];
		};

		/**
		 * 回调方法参数对象绑定
		 */
		JqExt.funParameterBind = function($fn,$obj,$objef,$satisfyfn){
			if(typeof $fn === 'function'){
				if(typeof $obj != 'object'){
					$obj={};
				}
				if(typeof $objef != 'object'){
					$objef={};
				}
				var _f=JqExt.funArgs($fn);
				for(var i in _f){
					if(typeof $objef[_f[i]] === 'function'){$objef[_f[i]]();}
					_f[i]=$obj[_f[i]];
					
				}
				if(typeof $satisfyfn === 'function'){
					$satisfyfn(function(){
						if(_f.length > 0){
							$fn(_f[0],_f[1],_f[2],_f[3],_f[4],_f[5],_f[6],_f[7],_f[8],_f[9],_f[10],_f[11],_f[12],_f[13],_f[14],_f[15],_f[16],_f[17],_f[18],_f[19],_f[20]);
						}else{
							$fn();
						}
					});
				}else{
					if(_f.length > 0){
						$fn(_f[0],_f[1],_f[2],_f[3],_f[4],_f[5],_f[6],_f[7],_f[8],_f[9],_f[10],_f[11],_f[12],_f[13],_f[14],_f[15],_f[16],_f[17],_f[18],_f[19],_f[20]);
					}else{
						$fn();
					}
				}
			}
		};
		
		/**
		 * 获取url里面参数
		 */
		JqExt.urlparameter = function (name) {
	        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
	        var r = window.location.search.substr(1).match(reg);  //匹配目标参数
	        if (r != null) return unescape(r[2]); return null; //返回参数值
	    };
	    
	    JqExt.loaddata = function ($url) {
			var _data='';
			// 请求加载data
	 		$.ajax({
				url: $url,
		        data:{_r:Math.random()},
		        success: function(data) {
		        	_data = data;
		        },
		        async:false
			});
			return _data;
	    };
	    

		$.extend({fobind : JqExt.funParameterBind});
		$.fn.extend({fobind:JqExt.funParameterBind});
		
		$.extend({funParameterBind : JqExt.funParameterBind});
		$.fn.extend({funParameterBind:JqExt.funParameterBind});

		$.extend({urlparameter : JqExt.urlparameter});
		$.fn.extend({urlparameter:JqExt.urlparameter});

		$.extend({loaddata : JqExt.loaddata});
		$.fn.extend({loaddata:JqExt.loaddata});

	})(jQuery);
});